
#include "dbcon.h"
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdlib.h>

struct timeval tim;
FILE *arq;
struct rusage ru;        

void echoroutine_1(char* host, int argc, char *argv[])
{
   CLIENT *clnt;
   double  f, t1, t2,total;
      	char *endptr, entrada[50];
      	int i, cont=0;
      	output_data *output;	//Variaveis de output que estão no XDR
      	output_data_string *string;
	input_data input;
	
	while (cont<100)
	{
		total = 0;
		scanf ("%s", entrada);
  		clnt = clnt_create(host, echoprog, echovers, "tcp");
  		if (clnt == NULL) {
  	    		clnt_pcreateerror(host);
   	    		exit(1);
   	   		} 
   	   	/*
   	   	Declaração das variaveis de input que estão no XDR
   	   	*/
   		input.input_data = (char*) malloc (sizeof(char)*10);
   		input.input_nome = (char*) malloc (sizeof(char)*60);
   		input.input_removetype = (char*) malloc (sizeof(char)*10);
   	
   		strcpy((input.input_data), entrada);
   		if (!strcmp(input.input_data,"INSERT"))
	  	{
		  	getchar();
		   	scanf("%[^\n]s", entrada);
		   	strcpy((input.input_nome), entrada);
		     	gettimeofday(&tim, NULL);
		     	t1=tim.tv_sec+(tim.tv_usec/1000000.0);
		     	output = echo_1(&input, clnt);	//Chamada da Rotina de RPC
		     	gettimeofday(&tim, NULL);
		 	t2=tim.tv_sec+(tim.tv_usec/1000000.0);
		  	total = total + t2-t1;
	    		if (output == NULL) {
	      			clnt_perror(clnt, "call failed:");
   				}
		 	if(output->i)
				printf("Inserido com sucesso");
			else
				printf("\nFalha na Inserção");
		fprintf(arq,"Tempo de insercao : %lf\n",total);
		
		printf("\nTempo de insercao : %lf\n",total);
	     }
	  else if (!strcmp(input.input_data,"DELETE"))
	  { 
	  	getchar();
	  	scanf("%s",entrada);
	  	strcpy(input.input_removetype, entrada); 	   
	   	scanf(" %[^\n]s", entrada);
	   	strcpy((input.input_nome), entrada);
	     	gettimeofday(&tim, NULL);	
             	t1=tim.tv_sec+(tim.tv_usec/1000000.0);
	     	output = echo_1(&input, clnt);		//Chamada da Rotina de RPC
	     	gettimeofday(&tim, NULL);
         	t2=tim.tv_sec+(tim.tv_usec/1000000.0);
	  	total = total + t2-t1;
	    	if (output == NULL) {
	      		clnt_perror(clnt, "call failed:");
   			}
		if(output->i)
			printf("\nRemovido com sucesso");
		else
			printf("\nFalha na remocao");
			printf("\nTempo de remocao : %lf\n",total);
			fprintf(arq,"Tempo de Remocao : %lf\n",total);
		
	     }
	     else if (!strcmp(input.input_data,"SELECT")){
	     		gettimeofday(&tim, NULL);
            		t1=tim.tv_sec+(tim.tv_usec/1000000.0);
	     		output = echo_1(&input, clnt);
			string = select_1(&input, clnt);     //Chamada da Rotina de RPC
    	 		gettimeofday(&tim, NULL);
        		t2=tim.tv_sec+(tim.tv_usec/1000000.0);
	  		total = total + t2-t1;;
			if (string == NULL) {
	      			clnt_perror(clnt, "call failed:");
   				}
   			else
			printf("%s", string->str);
		printf("\nTempo de Busca : %lf\n",total);

		fprintf(arq,"Tempo de Busca : %lf\n",total);
	
	  }
	  free(input.input_data);
	  free(input.input_nome);
	  free(input.input_removetype);
   clnt_destroy(clnt);
   cont++;
 }
 
   fclose (arq);
}


main( int argc, char** argv )
{
   char *host;
   char name[20];
   
   sprintf(name, "tempos%d", getpid());
   host = argv[1];
   arq = fopen (name, "w+");
   echoroutine_1(host, argc, argv);
}
